# Este es el makefile usado para manejar el proyecto secuencial y paralelo


# Constantes y objetivos generales
SRC_DIR=src
BUILD_DIR=target
COMMON_HEADERS = $(SRC_DIR)/compartido/mergesort.h $(SRC_DIR)/compartido/vectores.h $(SRC_DIR)/compartido/entrada-salida.h 
COMMON_SOURCES = $(SRC_DIR)/compartido/mergesort.c $(SRC_DIR)/compartido/vectores.c $(SRC_DIR)/compartido/entrada-salida.c
COMMON_LIBS = -lm

clean : clean-par clean-sec
build : build-par build-sec


# Constantes y objetivos para la versión secuencial el programa

HEADERS_SEC = $(COMMON_HEADERS)
SOURCES_SEC = $(SRC_DIR)/secuencial/main-sec.c $(COMMON_SOURCES)
EXEC_SEC = $(BUILD_DIR)/main-sec
EXEC_SEC_GPROF = $(BUILD_DIR)/main-sec-gprof
EXEC_SEC_VALG = $(BUILD_DIR)/main-sec-valg

build-sec: $(COMMON_HEADERS) $(SOURCES_SEC)
	gcc -Wall -O2 -o $(EXEC_SEC) $(SOURCES_SEC) $(COMMON_LIBS)

build-sec-gprof: $(COMMON_HEADERS) $(SOURCES_SEC)
	gcc -Wall -pg -o $(EXEC_SEC_GPROF) $(SOURCES_SEC) $(COMMON_LIBS)

build-sec-valg: $(COMMON_HEADERS) $(SOURCES_SEC)
	gcc -Wall -g -O0 -o $(EXEC_SEC_VALG) $(SOURCES_SEC) $(COMMON_LIBS)

clean-sec:
	rm -f $(EXEC_SEC) $(EXEC_SEC_GPROF) $(EXEC_SEC_VALG)


# Constantes y objetivos para la versión paralela del programa

HEADERS_PAR = $(SRC_DIR)/paralelo/coordinador/envio-vector.h $(SRC_DIR)/paralelo/coordinador/coordinador.h \
	$(SRC_DIR)/paralelo/coordinador/ordenamiento-final.h $(SRC_DIR)/paralelo/coordinador/plan-trabajo.h \
	$(SRC_DIR)/paralelo/nodo/envio-resultado.h $(SRC_DIR)/paralelo/nodo/ordenamiento-adicional.h \
	$(SRC_DIR)/paralelo/nodo/ordenamiento-inicial.h $(SRC_DIR)/paralelo/nodo/recepcion-asignacion.h \
	$(SRC_DIR)/paralelo/nodo/nodo.h $(SRC_DIR)/paralelo/varios/compresion.h $(SRC_DIR)/paralelo/varios/log.h \
	$(SRC_DIR)/paralelo/varios/lz4.h $(SRC_DIR)/paralelo/varios/mpi-utiles.h $(SRC_DIR)/paralelo/varios/mensajes.h \
	$(COMMON_HEADERS)
SOURCES_PAR = $(SRC_DIR)/paralelo/coordinador/envio-vector.c $(SRC_DIR)/paralelo/coordinador/coordinador.c \
	$(SRC_DIR)/paralelo/coordinador/ordenamiento-final.c $(SRC_DIR)/paralelo/coordinador/plan-trabajo.c \
	$(SRC_DIR)/paralelo/nodo/envio-resultado.c $(SRC_DIR)/paralelo/nodo/ordenamiento-adicional.c \
	$(SRC_DIR)/paralelo/nodo/ordenamiento-inicial.c $(SRC_DIR)/paralelo/nodo/recepcion-asignacion.c \
	$(SRC_DIR)/paralelo/nodo/nodo.c $(SRC_DIR)/paralelo/varios/compresion.c $(SRC_DIR)/paralelo/varios/log.c \
	$(SRC_DIR)/paralelo/varios/lz4.c $(SRC_DIR)/paralelo/varios/mpi-utiles.c $(SRC_DIR)/paralelo/main-par.c \
	$(COMMON_SOURCES)
EXEC_PAR = $(BUILD_DIR)/main-par
EXEC_PAR_DEBUG = $(BUILD_DIR)/main-par-debug

build-par: $(HEADERS_PAR) $(SOURCES_PAR)
	mpicc -Wall -O2 -o $(EXEC_PAR) $(SOURCES_PAR) $(COMMON_LIBS)

build-par-debug: $(HEADERS_PAR) $(SOURCES_PAR)
	mpicc -D_DO_LOG -Wall -ggdb -o $(EXEC_PAR_DEBUG) $(SOURCES_PAR) $(COMMON_LIBS)

clean-par:
	rm -f $(EXEC_PAR) $(EXEC_PAR_DEBUG)
